using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IntelligenceTools._Analysis._Suitability
{
    /// <summary>
    /// <para>DOF To Obstacle Features</para>
    /// <para>Converts the U.S. Federal Aviation Administration (FAA) Digital Obstacle File (DOF) to obstruction points and obstruction buffer features.</para>
    /// <para>将美国联邦航空管理局 （FAA） 数字障碍物文件 （DOF） 转换为障碍点和障碍物缓冲要素。</para>
    /// </summary>    
    [DisplayName("DOF To Obstacle Features")]
    public class DOFToObstacleFeatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public DOFToObstacleFeatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_table">
        /// <para>Input Table</para>
        /// <para>The input DOF table to convert into obstacle features.</para>
        /// <para>要转换为障碍物要素的输入景深表。</para>
        /// </param>
        /// <param name="_out_obstacle_features">
        /// <para>Output Obstacle Features</para>
        /// <para>The point obstacle features created from the Input Table.</para>
        /// <para>从输入表创建的点障碍物要素。</para>
        /// </param>
        /// <param name="_out_obstacle_buffers">
        /// <para>Output Obstacle Buffers</para>
        /// <para>The distance buffers created at 10 times the value of the AGL field in the Input Table.</para>
        /// <para>在输入表中 AGL 字段值的 10 倍处创建的距离缓冲区。</para>
        /// </param>
        public DOFToObstacleFeatures(object _in_table, object _out_obstacle_features, object _out_obstacle_buffers)
        {
            this._in_table = _in_table;
            this._out_obstacle_features = _out_obstacle_features;
            this._out_obstacle_buffers = _out_obstacle_buffers;
        }
        public override string ToolboxName => "Intelligence Tools";

        public override string ToolName => "DOF To Obstacle Features";

        public override string CallName => "intelligence.DOFToObstacleFeatures";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_table, _out_obstacle_features, _out_obstacle_buffers, _clip_features];

        /// <summary>
        /// <para>Input Table</para>
        /// <para>The input DOF table to convert into obstacle features.</para>
        /// <para>要转换为障碍物要素的输入景深表。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_table { get; set; }


        /// <summary>
        /// <para>Output Obstacle Features</para>
        /// <para>The point obstacle features created from the Input Table.</para>
        /// <para>从输入表创建的点障碍物要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Obstacle Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_obstacle_features { get; set; }


        /// <summary>
        /// <para>Output Obstacle Buffers</para>
        /// <para>The distance buffers created at 10 times the value of the AGL field in the Input Table.</para>
        /// <para>在输入表中 AGL 字段值的 10 倍处创建的距离缓冲区。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Obstacle Buffers")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_obstacle_buffers { get; set; }


        /// <summary>
        /// <para>Clip Features</para>
        /// <para>An area to clip from the Input Table. Only obstacles within this area will be created and buffered.</para>
        /// <para>要从输入表中剪裁的区域。只有此区域内的障碍物才会被创建和缓冲。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Clip Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _clip_features { get; set; } = null;


        public DOFToObstacleFeatures SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}